﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ecommerce.Web.Code;
using Ecommerce.Model;
using System.Web.Security;
using Ecommerce.Frete;

namespace Ecommerce.Web
{
    public partial class CarrinhoCompras : BasePage
    {
        ProdutoModel _produtoModel = new ProdutoModel();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.CarregarCarrinho();
                Session["freteCalculado"] = false;
                Session["valorFrete"] = 0;
            }

            //if (Carrinho.Instance.Items.Count.Equals(0))
            //    trCupom.Visible = false;
            //else
            //    trCupom.Visible = true;
        }

        private void CarregarCarrinho()
        {
            rptCarrinho.DataSource = Carrinho.Instance.Items;
            rptCarrinho.DataBind();

            liFrete.Text = liSubtotal.Text = liTotal.Text = double.Parse("0").ToString("c");

            if (Carrinho.Instance.Items.Count > 0)
            {
                liFrete.Text = Convert.ToDecimal(Session["valorFrete"]).ToString("c");
                liCupom.Text = (Carrinho.Instance.SubTotal * Carrinho.Instance.DescontoCupom).ToString("c");
                liSubtotal.Text = Carrinho.Instance.SubTotal.ToString("c");
                liTotal.Text = Carrinho.Instance.Total.ToString("c");

                int tamanho = Carrinho.Instance.Items.Count - 1;
                Random r = new Random();

                this.CarregarProdutosRelacionados(Carrinho.Instance.Items[r.Next(0, tamanho)].pro_idt_produto);
            }
        }

        private void CarregarProdutosRelacionados(int identificadorProduto)
        {
            this.ctrlProdutosRelacionados.CarregarProdutosRelacionados(identificadorProduto);
            //List<tb_pro_produto> lista = _produtoModel.ListarProdutosRelacionados(identificadorProduto);
            //if (lista.Count > 0)
            //{
            //    if (lista.Count > 4)
            //        lista = lista.Take(4).ToList();

            //    rptProdutosRelacionados.DataSource = lista;
            //    rptProdutosRelacionados.DataBind();
            //}
        }

        //protected void rptProdutosRelacionados_ItemDataBound(object sender, RepeaterItemEventArgs e)
        //{
        //    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        //    {
        //        tb_pro_produto produto = (tb_pro_produto)e.Item.DataItem;

        //        HyperLink hlDetalhesImagem = (HyperLink)e.Item.FindControl("hlDetalhesImagem");
        //        Image imgProduto = (Image)e.Item.FindControl("imgProduto");
        //        Literal liProduto = (Literal)e.Item.FindControl("liProduto");
        //        Literal liPreco = (Literal)e.Item.FindControl("liPreco");
        //        HyperLink hlDetalhes = (HyperLink)e.Item.FindControl("hlDetalhes");
                

        //        hlDetalhesImagem.NavigateUrl = "~/produto/" + Server.UrlEncode(produto.pro_cod_produto);
        //        hlDetalhes.NavigateUrl = "~/produto/" + Server.UrlEncode(produto.pro_cod_produto);


        //        if (this.TipoUsuarioLogado == TipoPessoa.PFI || this.TipoUsuarioLogado == TipoPessoa.PJU)
        //            liPreco.Text = ProdutoModel.CalcularDesconto(produto, false, 2, produto.pro_vlr_preco_consumidor).ToString("c");
        //        else
        //            liPreco.Text = ProdutoModel.CalcularDesconto(produto, false, 2, produto.pro_vlr_preco_revenda).ToString("c");

        //        liProduto.Text = produto.pro_nom_produto;

        //        tb_ipr_imagem_produto imagemProduto = produto.tb_ipr_imagem_produto.Where(x => x.ipr_num_ordem_imagem.Equals(1)).FirstOrDefault();

        //        if (imagemProduto != null)
        //            imgProduto.ImageUrl = imagemProduto.ipr_des_caminho_virtual;
        //        else
        //            imgProduto.ImageUrl = "~/images/imagem_nao_disp_home.jpg";
        //    }
        //}

        protected void lbProsseguirCompraTopo_Click(object sender, EventArgs e)
        {
            if (Carrinho.Instance.Items.Count.Equals(0))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Seu carrinho de compras não possui itens');", true);
                return;
            }

            if (Convert.ToBoolean(Session["freteCalculado"]))
            {
                Carrinho.Instance.Frete = Convert.ToDecimal(Session["valorFrete"]);
                Response.Redirect("~/SelecionarEndereco.aspx");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Calcule o frete antes de continuar');", true);
            }
        }

        protected void lbCalcularFrete_Click(object sender, EventArgs e)
        {
            Session["freteCalculado"] = true;
            Session["valorFrete"] = Direct.Instance.Calcular(txtCep.Text.Replace("-", ""), Carrinho.Instance.PesoTotalKg, Carrinho.Instance.Total);
            Carrinho.Instance.Frete = Convert.ToDecimal(Session["valorFrete"]);
            Carrinho.Instance.Transportadora = TransportadoraModel.Instance.Obter("DIR");
            this.CarregarCarrinho();
        }

        protected void rptCarrinho_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                tb_ipe_item_pedido item = (tb_ipe_item_pedido)e.Item.DataItem;

                Image imgProduto = (Image)e.Item.FindControl("imgProduto");
                Literal liProduto = (Literal)e.Item.FindControl("liProduto");
                Literal liPreco = (Literal)e.Item.FindControl("liPreco");
                TextBox txtQuantidade = (TextBox)e.Item.FindControl("txtQuantidade");
                Literal liTotal = (Literal)e.Item.FindControl("liTotal");
                LinkButton lbExcluir = (LinkButton)e.Item.FindControl("lbExcluir");
                Label lblDescAbre = (Label)e.Item.FindControl("lblDescAbre");

                liProduto.Text = item.tb_pro_produto.pro_nom_produto;
                liPreco.Text = item.ipe_vlr_item.ToString("c");
                txtQuantidade.Text = item.ipe_qtd_item_pedido.ToString();
                liTotal.Text = (item.ipe_vlr_item * item.ipe_qtd_item_pedido).ToString("c");
                txtQuantidade.Attributes.Add("produto", item.pro_idt_produto.ToString());
                lblDescAbre.Text = item.tb_pro_produto.pro_des_abreviada;

                tb_ipr_imagem_produto imagemProduto = item.tb_pro_produto.tb_ipr_imagem_produto.Where(x => x.ipr_num_ordem_imagem.Equals(1)).FirstOrDefault();

                if (imagemProduto != null)
                    imgProduto.ImageUrl = imagemProduto.ipr_des_caminho_virtual;
                else
                    imgProduto.ImageUrl = "~/images/imagem_nao_disp_home.jpg";

                lbExcluir.CommandArgument = item.pro_idt_produto.ToString();
            }
        }

        protected void rptCarrinho_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            if (e.CommandSource is LinkButton)
            {
                Session["freteCalculado"] = false;
                Session["valorFrete"] = 0;
                Carrinho.Instance.Remover(Convert.ToInt32(e.CommandArgument));
                this.CarregarCarrinho();
            }
        }

        protected void txtQuantidade_TextChanged(object sender, EventArgs e)
        {
            Session["freteCalculado"] = false;
            Session["valorFrete"] = 0;
            TextBox txt = (TextBox)sender;
            int identificadorProduto = int.Parse(txt.Attributes["produto"]);

            tb_ipe_item_pedido item = Carrinho.Instance.Items.Where(x => x.pro_idt_produto == identificadorProduto).First();
            Carrinho.Instance.Adicionar(item.tb_pro_produto, int.Parse(txt.Text), item.ipe_vlr_item);

            this.CarregarCarrinho();
        }

        protected void lbCalcularCupom_Click(object sender, EventArgs e)
        {
            Page.Validate("cupom");
            if (Page.IsValid)
            {
                tb_cup_cupom cupom = CupomModel.Instance.ListarCupom(txtCupom.Text);
                Carrinho.Instance.Cupom = cupom;
                this.CarregarCarrinho();
            }
        }

        protected void cvCupom_ServerValidate(object source, ServerValidateEventArgs args)
        {
            tb_cup_cupom cupom = CupomModel.Instance.ListarCupom(txtCupom.Text);
            if (cupom == null)
                args.IsValid = false;
            else
                args.IsValid = true;
        }
    }
}